package com.zhibi.util.io;

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;
import org.springframework.web.multipart.MultipartFile;

import com.zhibi.util.common.UUIDUtil;

public class FileUtil {

	/**
	 * 
	 * @Author 执笔
	 * @Date 2016年1月6日 上午9:56:34
	 * @TODO 保存文件 
	 * @param rootPath 保存文件根目录  后面需要带上  /
	 * @param file 要保存的文件
	 * @throws IOException
	 * @Return 文件的保存路径 
	 */
	public static String save(String rootPath,File file) throws IOException{
		String fileName = getNewName(file.getName());
		String path = rootPath + getRealPath(fileName);
		FileUtils.copyFile(file, new File(path));
		return path;
	}
	
	/**
	 * 
	 * @Author 执笔
	 * @Date 2016年1月6日 上午10:21:05
	 * @TODO spingmvc 的保存文件
	 * @param rootPath
	 * @param file
	 * @return
	 * @throws IllegalStateException
	 * @throws IOException String
	 */
	public static String save(String rootPath,MultipartFile file) throws IllegalStateException, IOException{
		String fileName = getNewName(file.getOriginalFilename());
		String path = rootPath + getRealPath(fileName);
		file.transferTo(new File(path));
		return path;
	}
	
	/**
	 * 
	 * @Author 执笔
	 * @Date 2016年1月6日 上午10:10:16
	 * @TODO 根据文件名读取文件
	 * @param rootPath
	 * @param fileName
	 * @return File
	 */
	public static File read(String rootPath,String fileName){
		return new File(rootPath + getRealPath(fileName));
	}
	
	/**
	 * 
	 * @Author 执笔
	 * @Date 2016年1月6日 上午10:07:09
	 * @TODO 得到文件的相对完整路径
	 * @param fileName
	 * @return String
	 */
	public static String getRealPath(String fileName){
		return getPath(fileName)+fileName;
	}
	
	/**
	 * 
	 * @Author 执笔
	 * @Date 2016年1月6日 上午9:22:09
	 * @TODO 得到新的名字，文件类型不变
	 * @param name
	 * @return String
	 */
	public static String getNewName(String name){
		String back = name.substring(("."+name).lastIndexOf("."));
		return UUIDUtil.getUUID()+"."+back;
	}
	
	/**
	 * 
	 * @Author 执笔
	 * @Date 2016年1月6日 上午9:55:35
	 * @TODO 得到文件保存父路径
	 * @param fileName 文件名
	 * @return String
	 */
	public static String getPath(String fileName){
		String back = fileName.substring(("."+fileName).lastIndexOf("."));
		back = back.length()>5?"none":back;
		int code = fileName.hashCode()>0?fileName.hashCode() : -fileName.hashCode();
		return back+"/"+code%99+"/"+code%49+"/";
	}
	
	public static void main(String[] args) {
		String path = "F:/verifies/2BFR.jpg";
		try {
			FileUtil.save("F:/verifies/",new File(path));
		} catch (IOException e) {
			e.printStackTrace();
		}
		File file= FileUtil.read("F:/verifies/", "3c7d5143b7094f81b536991e26a50311.jpg");
		System.out.println(file.getAbsolutePath());
		System.out.println(file.isFile());
	}
}
